package pe.com.csi.pm.regexiv.dao;

import java.util.ArrayList;
import java.util.List;

import pe.com.csi.pm.regexiv.bean.Usuario;
import pe.com.csi.pm.regexiv.db.DaoManager;
import pe.com.csi.pm.regexiv.interfaces.UsuarioDAO;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class UsuarioDAOImpl implements UsuarioDAO {

	private Context context;

	public UsuarioDAOImpl(Context context) {
		this.context = context;
	}

	@Override
	public Usuario login(String user, String pass) {
		Usuario usuario = null;
		try {
			DaoManager usdbh = new DaoManager(context);
			SQLiteDatabase db = usdbh.getReadableDatabase();
			String[] where = { user, pass };
			String sql = "SELECT IDUSUA, NOMBREUSUA, APELLIDOUSUA, CLAVEUSUA, IDROL, USUARIOUSUA, ISACTUSUA   FROM USUARIO WHERE USUARIOUSUA = ? AND CLAVEUSUA = ? ";
			Cursor c = db.rawQuery(sql, where);
			if (c.moveToFirst()) {
				Long idUsua = !c.isNull(0) ? c.getLong(0) : null;
				String nombreUsua = !c.isNull(1) ? c.getString(1) : "";
				String apellidoUsua = !c.isNull(2) ? c.getString(2) : "";
				String claveUsua = !c.isNull(3) ? c.getString(3) : "";
				Long idRol = !c.isNull(4) ? c.getLong(4) : null;
				String usuarioUsua = !c.isNull(5) ? c.getString(5) : "";
				Long estado = !c.isNull(6) ? c.getLong(6) : null;

				usuario = new Usuario();
				usuario.setIdUsua(idUsua);
				usuario.setNombreUsua(nombreUsua);
				usuario.setApellidoUsua(apellidoUsua);
				usuario.setClaveUsua(claveUsua);
				usuario.setIdRol(idRol);
				usuario.setUsuarioUsua(usuarioUsua);
				usuario.setIsactUsua(estado);
			}
			c.close();
			db.close();

		} catch (Exception e) {
			usuario = null;
			e.printStackTrace();
		}
		return usuario;

	}

	@Override
	public List<Usuario> listarUsuarios() {
		List<Usuario> listaUsuarios = new ArrayList<Usuario>();
		try {
			String sql = "SELECT U.IDUSUA , U.NOMBREUSUA, U.APELLIDOUSUA , U.CLAVEUSUA, U.IDROL, U.USUARIOUSUA, ISACTUSUA " + "FROM USUARIO U ";
			String where = " WHERE 1=1 ";
			String orderBy = " ORDER BY U.APELLIDOUSUA, U.NOMBREUSUA ";

			sql = sql + where + orderBy;
			System.out.println("SQL usuarios \n" + sql);
			DaoManager usdbh = new DaoManager(context);
			SQLiteDatabase db = usdbh.getReadableDatabase();
			Cursor c = db.rawQuery(sql, null);
			Usuario usuario;
			if (c.moveToFirst()) {
				do {
					Long idUsua = !c.isNull(0) ? c.getLong(0) : null;
					String nombreUsua = !c.isNull(1) ? c.getString(1) : "";
					String apellidoUsua = !c.isNull(2) ? c.getString(2) : "";
					String claveUsua = !c.isNull(3) ? c.getString(3) : "";
					Long idRol = !c.isNull(4) ? c.getLong(4) : null;
					String usuarioUsua = !c.isNull(5) ? c.getString(5) : "";
					Long estado = !c.isNull(6) ? c.getLong(6) : null;

					usuario = new Usuario();
					usuario.setIdUsua(idUsua);
					usuario.setNombreUsua(nombreUsua);
					usuario.setApellidoUsua(apellidoUsua);
					usuario.setClaveUsua(claveUsua);
					usuario.setIdRol(idRol);
					usuario.setUsuarioUsua(usuarioUsua);
					usuario.setIsactUsua(estado);

					listaUsuarios.add(usuario);
				} while (c.moveToNext());
			}
			c.close();
			db.close();
		} catch (Exception ex) {
			ex.printStackTrace();
		}
		return listaUsuarios;
	}

	@Override
	public int registrarUsuario(Usuario usuario) {
		int rows = 0;
		DaoManager usdbh = new DaoManager(context);
		SQLiteDatabase db = usdbh.getWritableDatabase();
		try {
			db.beginTransaction();
			ContentValues valores = new ContentValues();
			valores.put("IDUSUA", usuario.getIdUsua());
			valores.put("NOMBREUSUA", usuario.getNombreUsua());
			valores.put("APELLIDOUSUA", usuario.getApellidoUsua());
			valores.put("CLAVEUSUA", usuario.getClaveUsua());
			valores.put("IDROL", usuario.getIdRol());
			valores.put("USUARIOUSUA", usuario.getUsuarioUsua());
			valores.put("ISACTUSUA", usuario.getIsactUsua());
			long pos = db.insert("USUARIO", null, valores);
			System.out.println("REGISTRADO " + pos);
			if (pos == -1)
				rows = 0;
			else
				rows = 1;
			db.setTransactionSuccessful();
		} catch (Exception e) {
			rows = 0;
			e.printStackTrace();
		} finally {
			db.endTransaction();
			db.close();
		}
		return rows;
	}

	@Override
	public int eliminarAllUsuarios() {
		int rows = 0;
		DaoManager usdbh = new DaoManager(context);
		SQLiteDatabase db = usdbh.getWritableDatabase();
		try {
			db.beginTransaction();
			db.execSQL("DELETE FROM USUARIO");
			rows = 1;
			db.setTransactionSuccessful();
		} catch (Exception e) {
			rows = -1;
			e.printStackTrace();
		} finally {
			db.endTransaction();
			db.close();
		}
		return rows;
	}

}
